package nidea;
import java.sql.*;
import java.sql.ResultSet;
import java.math.BigInteger;
/**
 * 
 * @author Deskalsoft
 */
public class Creativo extends Usuario {
    private String nombre;
    private String apellidos;
    private String pais;
    private String direccion;
    private int codPostal;
    private int telCasa;
    private BigInteger telCel;    
    private String correo;
    private String usuario;
    private String contrasena;
    private int idCreativo;
    
    /**
     * Constructor Creativo, inicializa un creativo sin atributos     * 
     */
    public Creativo(){}
    
    /**
     * Constructor Creativo, inicializa los valores de los atributos de un creativo
     * @param idCreativo int contiene el identificador del creativo
     * @param nombre String contiene el(los) nombre(s) del creativo
     * @param apellidos String contiene el (los) apellidos del creativo
     * @param pais String contiene el pais del creativo
     * @param direccion String contiene la direccion del creativo
     * @param codPostal int contiene el codigo postal del creativo
     * @param telCasa int contiene el numero telefonico de la casa del creativo
     * @param telCel BigInteger contiene el numero telefonico del celular del creativo
     * @param correo String contiene el correo del creativo
     * @param usuario String contiene el nombre de usuario del creativo
     * @param contrasena String contienela contraseña del creativo
     * @return Creativo regresa un elemento de la clase creativo con todos los datos inicializados
     */
    
    public Creativo(int idCreativo, String nombre, String apellidos, String pais, String direccion, int codPostal, int telCasa, BigInteger telCel, String correo, String usuario, String contrasena){
        this.idCreativo = idCreativo;
        this.nombre=nombre;
        this.apellidos = apellidos;
        this.pais= pais;
        this.direccion = direccion;
        this.codPostal =codPostal;
        this.telCasa = telCasa;
        this.telCel=telCel;
        this.correo =correo;
        this.usuario = usuario;
        this.contrasena = contrasena;        
    }
    /**
     * @return int regresa un numero entero del primer indice disponible en la base de datos
     * para poder insertar un nuevo creativo
     */
    public int indice(){
        String error;
        int i = 1;     
        try{
            DBConexion cp = new DBConexion();            
            String sql = "SELECT idcreativo FROM creativobd ORDER BY idcreativo;";            
            ResultSet resultado=cp.getRS(sql);            
            while(resultado.next()){
                if(i != resultado.getInt("idcreativo")){
                    return i;
                }
                i++;
            }
            cp.cerrarConexion();
        }catch(Exception e){
            error="Error de conexion,favor de intentar mas tarde";
        }
        return i;
    }
    /**
     * @param usuario String contiene el nombre del usuario
     * @return boolean devuelve true si el nombre del usuario ya existe en la base de datos
     * false en el caso que este disponible
     */
    public boolean existente(String usuario){
        String error;
        try{
            DBConexion conexion = new DBConexion();
            conexion.abrirConexion();
            String sql = "select usuario from creativobd where usuario = '"+ usuario + "' UNION select usuario from empresabd where usuario = '"+ usuario + "'";
            ResultSet resultado = conexion.getRS(sql);
            if(resultado.next()){
                return true;
            }else{
                return false;
            }
        }catch(Exception e){
            error="Error de conexion,favor de intentar mas tarde";
        }  
        return false;
    }
    
    /**
     * Método altaCreativo inserta un nuevo creativo en la base de datos
     * @param nombre String contiene el(los) nombre(s) del creativo
     * @param apellidos String contiene el (los) apellidos del creativo
     * @param pais String contiene el pais del creativo
     * @param direccion String contiene la direccion del creativo
     * @param codPostal int contiene el codigo postal del creativo
     * @param telCasa int contiene el numero telefonico de la casa del creativo
     * @param telCel BigInteger contiene el numero telefonico del celular del creativo
     * @param correo String contiene el correo del creativo
     * @param usuario String contiene el nombre de usuario del creativo
     * @param contrasena String contienela contraseña del creativo
     * @return Creativo regresa un elemento de la clase creativo 
     * con los datos que fueron insertados en la base de datos
     */
    public Creativo altaCreativo (String nombre, String apellidos, String pais, String direccion, int codPostal, int telCasa, BigInteger telCel, String correo, String usuario, String contrasena) {
        int idcreativo= indice();
        Creativo c = null ;
        String error;
        try{
            DBConexion conexion = new DBConexion();
            conexion.abrirConexion();
            String sql = "insert into creativobd (idcreativo, nombre, apellidos , pais , direccion, codpostal, telcasa, telcel, correo, usuario,contrasena) VALUES ("+idcreativo+",'"+ nombre+"','"+ apellidos +"','" +pais+ "','"+ direccion+"',";
            if(codPostal == -1){
                sql = sql+ "null ,";
            }else{
                sql = sql + codPostal+",";
            }
            if(telCasa == -1){
                sql = sql+ "null ,";
            }else{
                sql = sql + telCasa+",";
            }
            if(telCel.equals(BigInteger.ZERO)){
                sql = sql+ "null ,'" +correo+"','" +usuario+"','" +contrasena+"');";
            }else{
                sql = sql + telCel+",'" +correo+"','" +usuario+"','" +contrasena+"');";
            }           
            Statement stmt = conexion.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            int jaja = stmt.executeUpdate(sql);
            conexion.cerrarConexion();
            c = consultarCreativo(idcreativo);
        } catch(Exception e){
            error="Error de conexion,favor de intentar mas tarde";
        }        
        return c;
    }
    
   /**
     * Método cambiarCreativo actualiza los datos del creativo en la base de datos
     * @param idCreativo int contiene el identificador del creativo
     * @param nombre String contiene el(los) nombre(s) del creativo
     * @param apellidos String contiene el (los) apellidos del creativo
     * @param pais String contiene el pais del creativo
     * @param direccion String contiene la direccion del creativo
     * @param codPostal int contiene el codigo postal del creativo
     * @param telCasa int contiene el numero telefonico de la casa del creativo
     * @param telCel BigInteger contiene el numero telefonico del celular del creativo
     * @param correo String contiene el correo del creativo
     * @param usuario String contiene el nombre de usuario del creativo
     * @param contrasena String contienela contraseña del creativo
     * @return Creativo regresa un elemento de la clase creativo con los datos que modifico
     */
    public Creativo cambiarCreativo (int idCreativo, String nombre, String apellidos, String pais, String direccion, int codPostal, int telCasa, BigInteger telCel, String correo, String usuario, String contrasena) {        
        Creativo c = null;
        String error;
        try{            
            DBConexion conexion = new DBConexion();
            conexion.abrirConexion();
            String sql = "UPDATE creativobd SET nombre = '" + nombre + "', apellidos ='" + apellidos + "', pais ='" + pais +"', direccion ='" + direccion +"', codpostal=" + codPostal +",telcasa=" +telCasa+",telcel=" +telCel+",correo='" +correo +"',usuario ='" +usuario+"',contrasena='" +contrasena+"' WHERE idcreativo ="+ idCreativo+";";
            Statement stmt = conexion.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            int jaja = stmt.executeUpdate(sql);
            conexion.cerrarConexion();
            c = consultarCreativo(idCreativo);
        } catch(Exception e){
            error="Error de conexion,favor de intentar mas tarde";
        }      
        
        return c;        
    }
    /**
     * Método consultar creativo devuelve el creativo relacionado con idCreativo
     * @param idCreativo contiene el id del creatvo que queremos consultar
     * @return Creativo un elemento de la clase creativo con todos los parametros que estan guardados en la base de datos
     */
    public Creativo consultarCreativo (int idCreativo) {
        Creativo c = null;
        String error;
        int cod, casa;
        BigInteger t;
        try{            
            DBConexion conexion = new DBConexion();
            conexion.abrirConexion();
            String sql = "select * from creativobd where idcreativo=" +idCreativo+";";
            ResultSet resultado=conexion.getRS(sql);
            if(resultado.next()){
                if(resultado.getString("codpostal")==null){
                    cod = -1;
                }else{
                    cod = resultado.getInt("codpostal");
                }
                if(resultado.getString("telcasa")==null){
                    casa = -1;
                }else{
                    casa = resultado.getInt("telcasa");
                }
                if(resultado.getString("telcel")==null){
                    t = new BigInteger("0");
                }else{
                    t = new BigInteger(resultado.getString("telcel"));
                }
                 
                c = new Creativo(resultado.getInt("idcreativo"),resultado.getString("nombre"),resultado.getString("apellidos"),resultado.getString("pais"),resultado.getString("direccion"), cod , casa , t ,resultado.getString("correo"),resultado.getString("usuario"),resultado.getString("contrasena"));
            }
            conexion.cerrarConexion();
        } catch(Exception e){
            error="Error de conexion,favor de intentar mas tarde";
        }        
        return c;
    }
    /**
 * Método bajaCreativo elimina de la base de datos un creativo con el ide id creativo
 * @param idCreativo int contiene el id del creativo que queremos eliminar
 */
    public void bajaCreativo (int idCreativo) {
        String error;
        try{            
            DBConexion conexion = new DBConexion();
            conexion.abrirConexion();
            String sql = "delete from creativobd WHERE idcreativo ="+ idCreativo+";";
            Statement stmt = conexion.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            int jaja = stmt.executeUpdate(sql);            
            conexion.cerrarConexion();
        } catch(Exception e){
            error="Error de conexion,favor de intentar mas tarde";
        }  
    }
    /**
     * Pone el valor al atributo nombre
     * @param nom contiene el nombre del creativo
     */
    public void setNombre (String nom) {
        nombre =nom;
    }
    /**
 * regresa el nombre del creativo
 * @return String
 */
    public String getNombre () {
        return this.nombre;
    }
    /**
 * Pone el valor al atributo apellidos
 * @param ap contiene el (los) apellido(s) del creativo
 */
    public void setApellidos (String ap) {
        apellidos = ap;
    }
    /**
 * regresa el(los) apellido(s) del creativo
 * @return String
 */
    public String getApellidos () {
        return this.apellidos;
    }
    /**
   * Pone el valor al atributo pais
   * @param pa contiene el pais del creativo
   */
    public void setPais (String pa) {
        pais = pa;
    }
    /**
 * regresa el pais del creativo
 * @return String
 */
    public String getPais () {
        return this.pais;
    }
    /**
     * Pone el valor al atributo direccion
     * @param dir contiene la direccion del creativo
     */
    public void setDireccion (String dir) {
        direccion = dir;
    }
    /**
 * regresa la direccion del creativo
 * @return String
 */
    public String getDireccion () {
        return this.direccion;
    }
    /**
 * Pone el valor al atributo codPostal
 * @param cod contiene el codigo postal del creativo
 */
    public void setCodPostal (int cod) {
        codPostal=cod;
    }
    /**
 * regresa el codigo postal del creativo
 * @return int
 */
    public int getCodPostal () {
        return this.codPostal;
    }
    /**
 * Pone el valor al atributo telCasa
 * @param casa contiene el numero telefonico de la casa del creativo
 */
    public void setTelCasa (int casa) {
        telCasa= casa;
    }
    /**
 * regresa el numero de la casa del creativo
 * @return int
 */
    public int getTelCasa () {
        return this.telCasa;
    }
    /**
 * Pone el valor al atributo telCel
 * @param cel contiene el numero celular del creativo
 */
    public void setTelCel (BigInteger cel) {
        telCel = cel;
    }
    /**
 * regresa el numero de celular del creativo
 * @return BigInteger
 */
    public BigInteger getTelCel () {
        return this.telCel;
    }
    /**
 * Pone el valor al atributo correo
 * @param co contiene el correo del creativo
 */
    public void setCorreo (String co) {
        correo = co;
    }
    /**
 * regresa el correo del creativo
 * @return String
 */
    public String getCorreo () {
        return this.correo;
    }
    /**
 * Pone el valor al atributo usuario
 * @param us contiene el nombre de usuario del creativo
 */
    public void setUsuario (String us) {
        usuario = us;
    }
    /**
 * regreso el nombre de usuario del creativo
 * @return String
 */
    public String getUsuario () {
        return this.usuario;
    }
    /**
 * Pone el valor al atributo contrasena
 * @param contra contiene la contraseña del creativo
 */
    public void setContrasena (String contra) {
        contrasena = contra;
    }
    /**
 * regresa la contraseña del creativo
 * @return String
 */
    public String getContrasena () {
        return this.contrasena;
    }
    /**
 * Pone el valor al atributo idCreativo
 * @param idCreat esel identificador del creativo
 */
    public void setIdCreativo (int idCreat) {
        idCreativo = idCreat;
    }
    /**
 * regresa el id del creativo
 * @return int 
 */
    public int getIdCreativo () {
        return this.idCreativo;
    }
}
